查看原文
其他

AUTOSAR OS概述(二)

快乐的肌肉 汽车MCU软件设计 2024-03-08

目录

1.AUTOSAR OS中的Alarm和Counter关系

1.1 Counter概念

1.2  Alarm和Counter

2.AUTOSAR OS中的Event

3.AUTOSAR OS中的ISR种类

4.AUTOSAR OS-APPLICATION概念     

5.AUTOSAR OS 多核的概念

6.AUTOSARO OS 任务切换过程详解


1

AUTOSAR OS中的Alarm和Counter关系

        如果忘记上篇OS的内容,大家可以复习一下:AUTOSAR OS概述(一)

1.1 Counter概念

      在AUTOSAR OS中,Counter用于事件的计数,例如timer tick;它有两种分类:

  • Hardware Counter

      硬件实现的计数器;通常是MCU的STM模块来处理。

  • Software Counter

      OS软件维护的Counter值;通常是调用API IncrementCounter进行递增。

       实际上,软件Counter基本很少使用,我们以Vector的MicroSAR OS为例,它在时间概念中描述MicroSAR OS的Counter(时基)是MCU内部的timer硬件产生,通常在定义OsCounter的对象类型为HARDWARE,配置一个OSDriver属性,同时OsAlarmCounterRef也需要配置。

       不仅如此,它还详细定义了硬件Counter的两种模式:

  • PIT(Periodical interrupt timer mode)

定时器硬件设置成 在严格的周期间隔内生成定时器中断请求;在这个中断服务例程里,OS检查alarm或者调度表是否应该执行相关动作
  • HRT(High resolution timer mode)

当一个alarm或者调度表动作应该执行时,timer硬件生成一个timer中断,在这个服务例程里OS执行响应动作,计算下个动作的时间间隔,并重新编程timer。

        上述两者对比如下:

1.2  Alarm和Counter

        AUTOSAR OS Alarm机制主要是用于激活Task、设置Event、增加Counter或者调用另一个Alarm call-back,通常我们用前两个比较多。如下图:

        换句话说,就是Counter自己在计数,我们在设计时就要考虑当计数到多少时,产生一个alarm,这个alarm用来干什么?就用来生成event、激活task等等。 

        通常,alarm的配置如下:

上图配置为alarm触发一个callback:Os_AlarmActionSetEvent;

还有一种周期性alarm的方式,如下图:


2

AUTOSAR OS中的Event

        在OSEK OS介绍(二)中我们介绍了Event机制,本质上是一种同步机制;当Task A在运行时,如果此时有Event触发了另外的Task B,且Task均可被抢占,这时候就通知A等待,B切换到运行状态,如下图所示:

再结合上面alarm的callback,大家有没有回想起RTE配置时经常看到的event\mask之类的配置,生成的代码如下:

3

AUTOSAR OS中的ISR种类

ISR,全称Interrupt Service Routine,它直接由硬件中断请求触发;
在AUTOSAR OS中定义了多种中断类型,具体如下:

其中 Category2的优先级在ISR中是最低的,但高于Task,但这个类别的ISR可以使用OS的服务,包括激活task;由于OS的介入,这类别的ISR的进入和退出会有额外的延迟
Category 1的优先级高于2,但低于SC2/4等级下的时间保护ISR ;它不可使用OS服务,使用起来更像是一个真正的中断。
Vector在此基础上扩展了Category0,具有更低的中断延迟,有点IRQ和FIQ的区别。

4

AUTOSAR OS-APPLICATION概念     

OS-Application是一个功能单元,主要包括:Task、ISR、Alarm、ScheduleTable、Counter;
OS负责在共享核心的OS-Application之间调度可用的处理资源。如果一个OS-Application被使用,那么所有的task、isrs、Counters、Alarms和ScheduleTables必须属于该OS-Application。属于统一Application的对象由权限访问彼此。其他Application访问这些对象需要事先配置。由访问权限意味着这些对象可以使用API服务。

        实际使用过程中包含两类OS-Application

1.Trusted OS-Application

        允许在监控和保护机制关闭时运行,OS假设该类型OS-Application不会导致内存相关的保护错误。该类型的OS Appliaction在管理员模式下运行,除了stack区域外,它可以读写整个内存区域。

2.Non-Trusted OS-Application

        不允许在监控和保护机制关闭时运行;它们限制了对内存的访问,限制了对操作系统模块API的访问,并在运行时强制执行它们的计时行为。

需要注意的是:Resource不属于任何OS-Appliaction,但必须明确授予对它们的访问权限。

其状态机如下:

  • APPLICATION_ACCESSIBLE:OS对象可以被其他Appliaction访问

  • APPLICATION_RESTARTING:OS对象不允许其他Application访问,除非OS-Application调用allowaccess

  • APPLICATION_TERMINATED:OS对象不允许被其他Application访问。

所以我们在做功能安全设计时,通常Trust和Non-Trust之间的数据通信通常也是通过RTE生成接口,如下:

5

AUTOSAR OS 多核的概念

多核数据概念主要还是试图避免核之间的并发写入访问。
内核可以读取所有核的OS数据,但是写入只能在自己这个核上实现。
  • 特定核心的数据可以链接到快速访问的内存中

  • 特定核心的数据可以链接到缓存内存中

      只有与自旋锁相关的变量必须链接到全局内存中,所有参与的内核都必须访问全局内存。

多核的task调度如下:

如上图,每个核都独立进行调度,T2、T3、T5以真正并行方式执行;同一核心上具有相同优先级的任务将按激活顺序执行;不同内核上具有相同优先级的任务可能不会按激活顺序执行,因为内核调度彼此独立。

多核启动概述

使用startOS来同步两次所有核。第一次同步点:在startupHook前执行,第二次在OS-Application设置StartupHoos完成后,且在调度器开始调度之前。

编辑

6

AUTOSARO OS 任务切换过程详解

      最后,我们来看RH850某块芯片的Task切换过程,主要是涉及到现场保护和恢复,如下:

编辑

    OS调用 Os_Hal_ContextSwitch(Current->Context, Next->Context)进行切换,具体可以看上图注释。这里不再赘述。 

继续滑动看下一个

AUTOSAR OS概述(二)

快乐的肌肉 汽车MCU软件设计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存